﻿//-----------------------------------------------------------------------
// <copyright file="UiSettingsData.cs" company="AFS">
// Copyright (c) AFS. All rights reserved.
//
//    This file is part of Chatbox.
//
//    Chatbox is free software: you can redistribute it and/or modify
//    it under the terms of the GNU Lesser General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    any later version.
//
//    Chatbox is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//    GNU Lesser General Public License for more details.
//
//    You should have received a copy of the GNU Lesser General Public License
//    along with Chatbox. If not, see http://www.gnu.org/copyleft/lesser.html
// </copyright>
//----------------------------------------------------------------------- 

namespace ChatBox.DomainObjects.Settings
{
    using System.Windows;

    /// <summary>
    /// Settings for the user interface
    /// </summary>
    public class UISettingsData
    {
        /// <summary>
        /// Gets or sets the current UI theme
        /// </summary>
        public string Theme { get; set; }

        /// <summary>
        ///  Gets or sets a value indicating whether to show the topic on the main window
        /// </summary>
        public bool ShowTopic { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show the "speak" area
        /// </summary>
        public bool ShowSpeak { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show the throbber
        /// </summary>
        public bool ShowThrobber { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show the other users
        /// </summary>
        public bool ShowOtherUsers { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to notify the user when a new version of this program is available
        /// </summary>
        public bool NotifyOfNewVersionAvailable { get; set; }

        /// <summary>
        /// Gets or sets the location and size of the main window
        /// </summary>
        public Rect MainWindowDimensions { get; set; }

        /// <summary>
        /// Gets or sets the location and size of the private messages window
        /// </summary>
        public Rect PrivateMessagesWindowDimensions { get; set; }

        /// <summary>
        /// Gets or sets the location and size of the tickers window
        /// </summary>
        public Rect TickersWindowDimensions { get; set; }
        
        /// <summary>
        /// Gets or sets a value indicating whether to play a sound on receiving a new public message
        /// </summary>
        public bool PlaySoundOnNewPublicMessage { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to play a sound on encountering an error
        /// </summary>
        public bool PlaySoundOnError { get; set; }
        
        /// <summary>
        /// Gets or sets a value indicating whether to play a sound on receiving a new private message
        /// </summary>
        public bool PlaySoundOnNewPrivateMessage { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show a popup window on a new private message
        /// </summary>
        public bool PopupWindowOnNewPrivateMessage { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show new private messages inline
        /// </summary>
        public bool InlineNewPrivateMessage { get; set; }

        /// <summary>
        /// Gets or sets the maximum number of private messages shown
        /// </summary>
        public int MaxPrivateMessagesShown { get; set; }

        /// <summary>
        /// Gets or sets the font size to use for public messages
        /// </summary>
        public double PublicMessageFontSize { get; set; }

        /// <summary>
        /// Gets or sets the font size to use for other users
        /// </summary>
        public double OtherUsersFontSize { get; set; }

        /// <summary>
        /// Gets or sets the font size to use for the topic
        /// </summary>
        public double TopicFontSize { get; set; }

        /// <summary>
        /// Gets or sets the font size to use for private messages
        /// </summary>
        public double PrivateMessageFontSize { get; set; }

        /// <summary>
        /// Gets or sets the font size to use for the popup notification
        /// </summary>
        public double NotificationFontSize { get; set; }

        /// <summary>
        /// Gets or sets the font size to use for the tooltip
        /// </summary>
        public double TooltipFontSize { get; set; }

        /// <summary>
        /// Gets or sets the font size to use for speaking
        /// </summary>
        public double SpeakFontSize { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show a 
        /// "send private message" mini button next to users in public chat
        /// </summary>
        public bool ShowSendPrivateMessageButtonInPublicChat { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show a 
        /// "send private message" mini button next to users in private messages
        /// </summary>
        public bool ShowSendPrivateMessageButtonInPrivateMessages { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show a 
        /// "send private message" mini button next to users in the "other users" list
        /// </summary>
        public bool ShowSendPrivateMessageButtonInOtherUsers { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to use the built-in Spellchecker
        /// </summary>
        public bool UseBuiltInSpellchecker { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to show the "delete message" button in private messages
        /// </summary>
        public bool ShowDeleteMessageButtonInPrivateMessages { get; set; }

        /// <summary>
        /// Gets or sets the settings tab shown
        /// </summary>
        public int SettingsTabIndex { get; set; }
    }
}